package com.nb.hdj.util;



;
import org.testng.IAnnotationTransformer;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.DisabledRetryAnalyzer;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @Description: implements IAnnotationTransformer接口。
 * 该类的作用是用来监听所有的测试方法是否有retryAnalyzer注解属性，
 * 如果有该属性则不会执行我们设定的重跑机制（局部重跑的优先级比全局的高）
 * @Author: hedongjia
 * @Date: 2021/11/26 上午10:55
 * @Version: v1.0
 */
public class RetryListener implements IAnnotationTransformer {
    //testNg7.0以前版本使用
//    public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
//        //1.初始化IRetryAnalyzer对象
//        IRetryAnalyzer iRetryAnalyzer = iTestAnnotation.getRetryAnalyzer();
//        //判断测试方法是否设置重跑属性
//        if (iRetryAnalyzer == null) {
//            //为空说明用例方法里面未设置重跑，则按照全局设置进行用例重跑
//            //如果用例方法设置了注解属性retryAnalyzer,则按照注解的重跑
//            iTestAnnotation.setRetryAnalyzer(TestCaseRetry.class);
//        }
//    }
    @Override
    public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
        Class<? extends IRetryAnalyzer> retry = annotation.getRetryAnalyzerClass();
        if (retry == DisabledRetryAnalyzer.class) {
            annotation.setRetryAnalyzer(TestCaseRetry.class);
        }
    }
}
